//dart官方api --https://api.dartlang.org/stable/2.2.0/dart-core/String-class.html
main(){
  String str1='abc';//
  String str2="abc";//可以使用单引号或双引号
  String str3='''ab
              c''';//三引号 多行字符串

  //字符串连接
  'hello'+' world';//hello world
  String str5='hello'' world'; //hello world,#可以省去加号连接符
  //插入字符串变量
  String str6 = 'hello world';
  //print('$str6 has ${str6.length} letters'); 


  //#####字符串属性##### 
  //判断是否为空
  bool b1=str6.isEmpty;//false
  bool b2=str6.isNotEmpty;//true


  //判断字符串长度
  int i=str6.length; //11
  str6.runtimeType;//判断变量类型

  //######字符串方法######
  //compareTo(String other) → int --比较数值大小的方法
  int i1=6.compareTo(5);//如果两字符串相同返回0，大于返回1，小于返回-1

  //contains(Pattern other, [ int startIndex = 0 ]) → bool --是否包含的方法
  bool b3='abc'.contains('ab');//true
  bool b4='abc'.contains('bc',1);//true  参数2位可选参数，表示从原字符串索引位置进行比较
  bool b5='abc'.contains(new RegExp(r'[a-z]'));//例用正则表达式

  //endsWith(String other) → bool --判断字符串末尾是否匹配
  bool b6='abc'.endsWith('bc');//true

  //indexOf(Pattern pattern, [ int start ]) → int --查找字符串首次出现的位置
  int i2='abc'.indexOf('b');//1
  int i3='abcdefgbrt'.indexOf('b',3);//7 #参数1也可以是正则#参数2从起始位置开始查找
  //lastIndexOf(Pattern pattern, [ int start ]) → int  --查找字符串最后出现的位置
  int i4='abcdb'.lastIndexOf('b');//4

  //padLeft(int width, [ String padding = ' ' ]) → String --如果字符串少于n个字符，则在左侧自动补充
  String str7='abc'.padLeft(5,'W');//WWabc
  //padRight(int width, [ String padding = ' ' ]) → String --如果字符串少于n个字符，则在右侧自动补充
  String str8='abc'.padRight(5,'W');//abcWW

  //replaceAll(Pattern from, String replace) --替换字符串
  String str9='abcda'.replaceAll('a','A');//AbcdA

  //replaceAllMapped(Pattern from, String replace(Match match)) --?????

  //replaceFirst（Pattern from， String to，[ int startIndex = 0 ]） → String  --从第参数3个索引位置开始，查找第一个匹配参数1的字符串，替换为参数2的字符串
  String str10='cccaaaaab'.replaceFirst('a','A',2);//aaAaab

  //replaceFirstMapped（Pattern from， String replace（Match match），[ int startIndex = 0 ]） → String --???

  //replaceRange（int start， int end， String replacement） → String --从参数1的索引到参数2的前一个索引，这个范围的字符串替换成参数3
  String str11='0123456'.replaceRange(2,5,'A');//01A56 

  //split(Pattern pattern) → List<String> --分裂字符串
  List list1='a,b,c,d,e'.split(',');// [a, b, c, d, e]

  //splitMapJoin(Pattern pattern, { String onMatch(Match match), String onNonMatch(String nonMatch) }) → String  --???

  //startsWith(Pattern pattern, [ int index = 0 ]) → bool --起始字符串是否匹配
  bool b7='abc'.startsWith('ab');//true 

  //substring(int startIndex, [ int endIndex ]) → String --字符串截取,从第参数1个开始到参数2的前一个结束
  String str4='hello world'.substring(0,3);//hel

  //toLowerCase() → String  --转小写
  String str12= 'aBcDe'.toLowerCase();
  //toUpperCase() → String  --转大写
  String str13= 'aBcDe'.toUpperCase();

  //trim() → String  --去掉字符串头和尾的空格
  String str14=' ab ce f '.trim();
  //trimLeft() → String --去掉字符串头空格
  String str15=' ab ce f '.trimLeft();
  //trimRight() → String --去掉字符串尾空格
  String str16=' ab ce f '.trimRight();

  print(str16);
} 